﻿Public Class LoginForm

	Public AppKey As String = "[Application]"

	Sub New()
		InitializeComponent()
		DoubleBuffered = True
	End Sub

	Sub Display(Value As Integer)
		Profil.Enabled = Value <> 3
		Birim.Visible = Value = 1
		Personel.Visible = Value <> 1
		Personel.Enabled = Value = 2
		Password.Visible = Value <> 3
		NewPassword1.Visible = Value = 3
		NewPassword2.Visible = Value = 3
		Kimlik.Visible = Value = 3
		Remember.Visible = Value <> 3
		RefreshLabels()
	End Sub

	Protected Overrides Sub OnLoad(e As System.EventArgs)
		MyBase.OnLoad(e)
		Help.Text = "Lütfen adınızı seçin ve parolanızı girin. Sisteme ilk defa giriş yapıyorsanız, parola bölümünü boş bırakın."
		Dim Profiles As New List(Of SourceItem)
		For Each Item In From x In GetSetting(AppKey, "Oturum", "Gecmis", ".").Split(".") Where x <> ""
			Profiles.Add(New SourceItem(Item, Kullanici.KullaniciAdi(Item)))
		Next
		Profiles.Add(New SourceItem("0", "(Yeni profil)"))
		Profil.LoadItems(Profiles)
		Profil.Clear()
		Personel.LoadItems(Kullanici.Liste(0))
		Birim.LoadItems(Kullanici.Birimler)
		Personel.Clear()
		Profil.SetValue(Profil.Items(0)(0))
		If Not Personel.Value Is Nothing Then Password.Focus()
	End Sub

	Protected Overrides Sub OnPaint(e As System.Windows.Forms.PaintEventArgs)
		MyBase.OnPaint(e)
		e.Graphics.FillRectangle(New SolidBrush(Color.FromArgb(128, Color.Black)), New Rectangle(0, 0, Width, Height))
	End Sub

	Private Sub BtnLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnLogin.Click
		If Personel.Value Is Nothing Then Exit Sub
		If Not NewPassword1.Visible Then
			If Check(Personel, Personel.Empty, "Kullanıcı seçimi yapmanız gerekir.") Then Exit Sub
			Kullanici.Oku(AppKey, Personel.Value, Password.Text)
			If Kullanici.Durum = Kullanici.KullaniciDurumu.MustChangePassword Then
				RefreshLabels()
				Info("Lütfen sisteme giriş yapmak için kullanmak istediğiniz parolayı belirleyin. Parola en az dört karakter olmak zorundadır. Güvenlik kontrolü açısından kimlik numaranızı girmeniz gerekmektedir.")
				Height += Kimlik.Bottom - NewPassword2.Bottom
				Display(3)
				NewPassword1.Focus()
				Help.Text = "Lütfen sisteme giriş yapmak için kullanmak istediğiniz en az dört karakter uzunlukta olacak şekilde bir parola belirleyin ve ilgili alanları doldurun."
			ElseIf Kullanici.Durum = Kullanici.KullaniciDurumu.InvalidPassword Then
				If Check(Password, Password.TextLength = 0, "Parolanızı girmeniz gerekir.") Then Exit Sub
				If Check(Password, Password.TextLength < 4, "Parola en az dört karakterden oluşmalıdır. Parolanızı doğru girdiğinizden emin olun.") Then Exit Sub
				If Check(Password, True, "Girdiğiniz parola yanlış. Lütfen parolanızı kontrol edin.") Then Exit Sub
			ElseIf Kullanici.Durum = Kullanici.KullaniciDurumu.OK Then
				Login()
			End If
		Else
			If Check(NewPassword1, NewPassword1.Text <> NewPassword2.Text, "Girdiğiniz parolalar aynı değil. Lütfen kontrol edin.") Then Exit Sub
			If Check(NewPassword1, NewPassword1.Text.Length < 4, "Belirlediğiniz parola en az dört karakter uzunluğunda olmalıdır. Lütfen kontrol edin.") Then Exit Sub
			If Check(Kimlik, Kimlik.Text = "", "Kimlik kartı numarası girişini yapmanız gerekir.") Then Exit Sub
			Dim Result = Kullanici.SifreDegistir(Personel.Value, Kimlik.Text, NewPassword1.Text)
			If Check(Kimlik, Result = "kh", "Girdiğiniz kimlik kartı numarası sistemde kayıtlı olanla eşleşmemektedir. Lütfen kontrol edin. Bunun bir hata olduğunu düşünüyorsanız sistem yetkililerine haber verin.") Then Exit Sub
			Info("Parolanız kaydedilmiştir. Uygulamayı belirlediğiniz parola ile kullanabilirsiniz.")
			Login()
		End If
	End Sub

	Sub Login()
		DialogResult = Windows.Forms.DialogResult.OK
		Dim History = GetSetting(AppKey, "Oturum", "Gecmis", ".")
		History = "." & Personel.Value & History.Replace("." & Personel.Value & ".", ".")
		SaveSetting(AppKey, "Oturum", "Gecmis", History)
		SaveSetting(AppKey, "Parola", "P" & Trim(Personel.Value), If(Remember.Checked, Password.Text, ""))
		Close()
	End Sub

	Private Sub Personel_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Personel.SelectedValueChanged
		If Personel.Value Is Nothing Then
			Password.Text = "" : Exit Sub
			Birim.Clear()
		End If
		Dim Rs = Kullanici.Bilgi(Personel.Value)
		Birim.SetValue(Rs("birim"))
		Password.Text = GetSetting(AppKey, "Parola", "P" & Personel.Value, "")
		Password.Visible = Not IsDBNull(Rs("password"))
		Remember.Visible = Password.Visible
		Remember.Checked = Password.Text <> ""
		RefreshLabels()
	End Sub

	Sub RefreshLabels()
		For Each Label As Label In From c In Controls Where TypeOf c Is Label And Controls.ContainsKey(Mid(c.Name, 4))
			Label.Enabled = Controls(Mid(Label.Name, 4)).Enabled
			Label.Visible = Controls(Mid(Label.Name, 4)).Visible
		Next
	End Sub

	Private Sub Profil_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Profil.SelectedValueChanged
		Display(If(Profil.SelectedValue = 0, 2, 1))
		If Profil.Value = "0" Then Personel.Clear() : Return
		Personel.SetValue(Profil.Value)
	End Sub

	Private Sub Help_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Help.Click
		Handle.Scroll(-60, 0, New Rectangle(100, 100, 200, 200), New Rectangle(100, 100, 200, 200))
	End Sub

End Class